import axios from 'axios';
import { API_PATHS, getAuthHeaders } from '../../../config/apiConfig';

export interface Friend {
  id: number;
  username: string;
  avatar: string;
  status: 'online' | 'offline';
  lastActiveTime?: string;
}

export class FriendService {
  private static readonly API_BASE = API_PATHS.friends;

  static async addFriend(friendId: number): Promise<void> {
    try {
      // 获取当前用户的认证信息
      const token = localStorage.getItem('token');
      if (!token) {
        console.error('用户未登录，无法添加好友');
        throw new Error('用户未登录');
      }
      
      // 从本地存储获取当前用户信息
      const userJson = localStorage.getItem('auth_user');
      const currentUser = userJson ? JSON.parse(userJson) : null;
      
      if (!currentUser || !currentUser.id) {
        console.error('无法获取当前用户信息');
        throw new Error('无法获取当前用户信息');
      }
      
      // 在 API 请求中包含用户 ID
      await axios.post(`${this.API_BASE}/${friendId}?userId=${currentUser.id}`, {}, { headers: getAuthHeaders() });
    } catch (error) {
      console.error('Error adding friend:', error);
      throw error;
    }
  }

  static async removeFriend(friendId: number): Promise<void> {
    try {
      // 获取当前用户的认证信息
      const token = localStorage.getItem('token');
      if (!token) {
        console.error('用户未登录，无法删除好友');
        throw new Error('用户未登录');
      }
      
      // 从本地存储获取当前用户信息
      const userJson = localStorage.getItem('auth_user');
      const currentUser = userJson ? JSON.parse(userJson) : null;
      
      if (!currentUser || !currentUser.id) {
        console.error('无法获取当前用户信息');
        throw new Error('无法获取当前用户信息');
      }
      
      // 在 API 请求中包含用户 ID
      await axios.delete(`${this.API_BASE}/${friendId}?userId=${currentUser.id}`, { headers: getAuthHeaders() });
    } catch (error) {
      console.error('Error removing friend:', error);
      throw error;
    }
  }

  static async getFriendList(): Promise<Friend[]> {
    try {
      // 获取当前用户的认证信息
      const token = localStorage.getItem('token');
      if (!token) {
        console.error('用户未登录，无法获取好友列表');
        return [];
      }
      
      // 从本地存储获取当前用户信息
      const userJson = localStorage.getItem('auth_user');
      const currentUser = userJson ? JSON.parse(userJson) : null;
      
      if (!currentUser || !currentUser.id) {
        console.error('无法获取当前用户信息');
        return [];
      }
      
      // 在 API 请求中包含用户 ID
      const response = await axios.get(`${this.API_BASE}?userId=${currentUser.id}`, { headers: getAuthHeaders() });
      // 后端返回的数据结构是 {code, message, data: {friends: [...]}}      
      return response.data.data?.friends || [];
    } catch (error) {
      console.error('Error fetching friend list:', error);
      return [];
    }
  }

  static async checkFriendship(friendId: number): Promise<boolean> {
    try {
      // 获取当前用户的认证信息
      const token = localStorage.getItem('token');
      if (!token) {
        console.error('用户未登录，无法检查好友关系');
        return false;
      }
      
      // 从本地存储获取当前用户信息
      const userJson = localStorage.getItem('auth_user');
      const currentUser = userJson ? JSON.parse(userJson) : null;
      
      if (!currentUser || !currentUser.id) {
        console.error('无法获取当前用户信息');
        return false;
      }
      
      // 在 API 请求中包含用户 ID
      const response = await axios.get(`${this.API_BASE}/${friendId}/isFriend?userId=${currentUser.id}`, { headers: getAuthHeaders() });
      return response.data.data?.isFriend || false;
    } catch (error) {
      console.error('Error checking friendship:', error);
      return false;
    }
  }
}